/**
 * PagFormUsuario.java
 *
 * Projeto: SGA-LEDS
 *
 * Rodrigo Soares Maia IFES - Instituto Federal do Espírito Santo - Campus Serra
 */
package controleInterno.cih;

import controleInterno.cci.CtrlInterno;
import controleInterno.cdp.ClassificacaoColaborador;
import controleInterno.cdp.Colaborador;
import controleInterno.cdp.Usuario;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Hlayout;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Row;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import utilitario.utilitarioPessoa.cdp.Sexo;

public class PagFormUsuario extends GenericForwardComposer
{
    private Window winFormUsuario;
    private Textbox nome;
    private Textbox eMail;
    private Textbox telefone;
    private Datebox dataIngresso;
    private Radiogroup sexo;
    private Hlayout privilegio;
    private Checkbox privilegioAdm;
    private Checkbox privilegioGer;
    private Radiogroup tipo;
    private Radio tipoAluno;
    private Radio tipoProfessor;
    private Textbox senha;
    private Textbox confirmacaoSenha;
    private Row linhaSenha;    
    private Row linhaConfirmacaoSenha;    
    private Button confirmar;
    private Button alterarSenha;
    
    CtrlInterno ctrl = CtrlInterno.getInstance();
    
    private int MODO;
    private Colaborador obj;
    private Usuario usuario;

    @Override
    public void doAfterCompose(Component comp) throws Exception
    {
        super.doAfterCompose(comp);
    }

    public void onCreate$winFormUsuario()
    {
        usuario = (Usuario) Executions.getCurrent().getSession().getAttribute("usuario");
        
        //verificando se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (usuario == null)
        {
            Executions.sendRedirect("/");
            winFormUsuario.detach();
        }
        else
        {
            MODO = (Integer) arg.get("tipo");

            if (MODO != CtrlInterno.SALVAR)
            {
                obj = (Colaborador) arg.get("obj");
                
                linhaSenha.setVisible(false);
                linhaConfirmacaoSenha.setVisible(false);
        
                this.preencherTela();

                if (MODO == CtrlInterno.CONSULTAR)
                {
                    
                    this.confirmar.setVisible(false);
                    this.alterarSenha.setVisible(false);
                    this.bloquearTela();
                }
            }
            else
            {
                this.alterarSenha.setVisible(false);
            }
        }
    }
    
    public void bloquearTela()
    {
        nome.setDisabled(true);
        eMail.setDisabled(true);
        telefone.setDisabled(true);
        dataIngresso.setDisabled(true);
        
        privilegioAdm.setDisabled(true);
        privilegioGer.setDisabled(true);
        tipoAluno.setDisabled(true);
        tipoProfessor.setDisabled(true);
    }
    
    public void preencherTela()
    {
        //TODO verificar o tipo de alteracao para ver o que sera preciso apagar
        //TODO tirar as linhas e nao os campos
        nome.setText(obj.getNome());
        eMail.setValue(obj.geteMail());
        telefone.setValue(obj.getTelefone());
        dataIngresso.setValue(obj.getDataIngresso().getTime()); 
        this.marcarTipo(obj.getTipo());
        this.marcarPrivilegio(usuario.getPrivilegioAdm(), usuario.getPrivilegioGerLab());
        
        if (!usuario.getPrivilegioAdm()) //nao tem privilegio de administrador?
        {
            privilegioAdm.setDisabled(true);
            privilegioGer.setDisabled(true);
            tipoAluno.setDisabled(true);
            tipoProfessor.setDisabled(true);
        }
    }
    
    public void marcarPrivilegio(boolean adm, boolean gerente) {
        privilegioAdm.setChecked(adm);
        privilegioGer.setChecked(gerente);
    }
    
    public int marcarSexo(Sexo sexo) {
        if (sexo == Sexo.FEMININO) {
            return 1;
        }
        else {
            return 0;
        }
    }
    public void marcarTipo(ClassificacaoColaborador c) {
        if (c == ClassificacaoColaborador.PROFESSOR) {
            tipoProfessor.setSelected(true);
        }
        else {
            tipoAluno.setSelected(true);
        }
    }
    
    public void onClick$tipoProfessor(Event event)
    {
        privilegioAdm.setChecked(true);
        privilegioGer.setChecked(true);
        
        privilegioAdm.setDisabled(true);
        privilegioGer.setDisabled(true);
    }
    
    public void onClick$tipoAluno(Event event)
    {       
        privilegioAdm.setDisabled(false);
        privilegioGer.setDisabled(false);
    }
    
    public void onClick$confirmar(Event event)
    {
        Map listaC = new HashMap();
        Map listaU = new HashMap();
        //ArrayList<Object> listaC = new ArrayList<>();
        //ArrayList<Object> listaU = new ArrayList<>();
        String senha, confirmacaoSenha;

        senha = this.senha.getValue();
        confirmacaoSenha = this.confirmacaoSenha.getValue();
        
        Calendar data = Calendar.getInstance();
        data.setTime(dataIngresso.getValue());
        
        if (MODO == ctrl.EDITAR)
        {
            obj.setNome(nome.getValue());
            obj.seteMail(eMail.getValue());
            obj.setTelefone(telefone.getValue());
            obj.setDataIngresso(data);
            
            usuario.setNome(eMail.getValue());
            
            if (usuario.getPrivilegioAdm() == true)
            {
                usuario.setPrivilegioAdm(privilegioAdm.isChecked());
                usuario.setPrivilegioGerLab(privilegioGer.isChecked());
            }
            
            if (ctrl.alterarColaborador(obj) != null && ctrl.alterarUsuario(usuario) != null)
            {
                winFormUsuario.onClose();
                //TODO mostrar mensagens de sucesso
            }
        }
        else
        {
            if (senha.equals(confirmacaoSenha))
            {
                //TODO pegar e passar todos os atributos
                listaC.put("nome", nome.getValue());
                listaC.put("email", eMail.getValue());
                listaC.put("telefone", telefone.getValue());
                listaC.put("dataIngresso", data);
                listaC.put("tipo", tipo.getSelectedItem().getValue());

                listaU.put("nome", eMail.getValue());
                listaU.put("senha", senha);
                listaU.put("privilegioAdm", privilegioAdm.isChecked());
                listaU.put("privilegioGerente", privilegioGer.isChecked());

                if (ctrl.salvarColaborador(listaC, listaU) != null)
                {
                    winFormUsuario.onClose();
                }
            }
            else
            {
                //msg de erro
            }
        }
    }

    public void onClick$alterarSenha(Event event)
    {
        ctrl.abrirPagAlterarSenha((Usuario) Executions.getCurrent().getSession().getAttribute("usuario"));
    }
    
    public void onClick$cancelar(Event event)
    {
        winFormUsuario.onClose();
    }
}
